package com.chapter12.demo2;

import java.util.function.BinaryOperator;

/**
 *
 * 12.5 方法引用
 * 如果一个类中的实现方法，其参数列表和返回值类型(MathUtil的add、subtract方法)
 * 与某个函数式接口中的方法（内置函数接口：BinaryOperator的apply方法）一致，   都是int类型
 *
 * 那么可以使用方法引用的方式来代替Lambda表达式。
 * Java编译器会利用函数式接口中方法的参数来调用引用的方法，
 * 并将该方法的返回值（如果有的话）作为接口方法的返回值。
 * 方法引用使用操作符“：：”将对象或者类的名字与方法名分隔开。
 * 主要有以下三种形式：
 * ● 对象：：实例方法名
 * ● 类名：：静态方法名
 * ● 类名：：实例方法名
 */
public class MethodReference {
    public static int operate(int a, int b, BinaryOperator<Integer> operator){
        return operator.apply(a,b);
    }

    public static void main(String[] args) {
        MathUtil mathUtil = new MathUtil();
        //int add = operate(5,3,(a,b)->mathUtil.add(5,3));
        int add = operate(5,3,mathUtil::add);

        // int subtract =operate(5,3,(a,b)->MathUtil.subtract(5,3));
        int subtract = operate(5,3,MathUtil::subtract);


    }
}
